Combined Model Plots
The function below will create a model plot that includes the predicted model response, confidence intervals, and the original data points. The function is called with:
- TheModel: A model returned from lm(), glm2(), gam()
- ResponseName: The name of the response variable used to create the model (e.g. "Height", "MaxHt")
- IndepentName: The name of the independent variable to chart the response against. The independent variable must have been used to create TheModel
- TheData: The original data frame used to create the model
- xlab: Optional parameter to replace the ResponseName as the x-axis label
- ylab: Optional parameter to replace the ResponseName as the y-axis label
An example is below.
#########################################################################################
# Creates plots of original data, modeled data, and confidence intervals for one independent
# variable plotted against the response variable for an existing model.
#
# Parameters
# - TheModel - lm, gam, glm, and potentially other models
# - ResponseName - a string containing the name of the response variable used to create the model
# - Independent - a string containing the name of the independent variable used in the creation of the model
# - TheData - Original data used to create the model
# - xlab: Optional parameter to replace the ResponseName as the x-axis label
# - ylab: Optional parameter to replace the ResponseName as the y-axis label
#########################################################################################
CombinedModelPlot=function(TheModel,ResponseName,IndependentName,TheData,xlab="",ylab="")
{
if (xlab=="") xlab=IndependentName
if (ylab=="") ylab=ResponseName
Response=TheData[[ResponseName]]
Independent=TheData[[IndependentName]]
# print(Independent)
# Create a sequence that goes over the entire predictor variable range
UniformAnnualPrecip = seq(min(Independent), max(Independent), length.out=100)
NewData=data.frame(IndependentName=UniformAnnualPrecip) # This sets the column name to "IndependentName"
colnames(NewData) <- c(IndependentName) # set the name of the column to match the name in TheModel
ThePredictions = predict(TheModel, newdata = NewData, type="response")
#response <- predict(TheModel, newdata = data.frame(AnnualPrecip=newx), interval = 'response')
ThePrediction=predict(TheModel,newdata=TheData,type="response") # create the prediction
TheStdErr=predict(TheModel,newdata = NewData,se=TRUE) # create the prediction
#plot(UniformAnnualPrecip,ThePredictions,xlab=xlab,ylab=ylab)
FinalDataFrame=data.frame(UniformAnnualPrecip,TheStdErr[1],ThePredictions[2])
# Setup the chart area (jjg - use min/max?)
plot(Independent,Response,xlab=xlab,ylab=ylab) # Plot the original data
UpperCI <- ThePredictions + (2 * TheStdErr$se.fit)
LowerCI <- ThePredictions - (2 * TheStdErr$se.fit)
# Plot the polygon by going left to right along the top of the polygon
# and then right to left along the bottom
polygon(c(UniformAnnualPrecip, rev(UniformAnnualPrecip)), c(UpperCI, rev(LowerCI)), col = 'grey80', border = NA)
lines(UniformAnnualPrecip, ThePredictions, col = 'black') # plot the response
# compute the upper and lower confidence intervals
lines(UniformAnnualPrecip, UpperCI, lty = 'dashed', col = 'black')
lines(UniformAnnualPrecip, LowerCI, lty = 'dashed', col = 'black')
# Original points
points(Independent,Response) # Plot the original data
}
Below is an example of calling the CombinedModelPlot function using a model with "Height" and the response variable and "AnnualPrecip" as the independent variable of interest.
CombinedModelPlot(TheModel,"Height","AnnualPrecip",TheData,xlab="Annual Precip",ylab="Height (m)")

R for Spatial Statistics